package com.healthcloud.service;

import java.util.HashMap;
import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.healthcloud.entity.Hospital;
import com.healthcloud.entity.HospitalCriteria;
import com.healthcloud.entity.HospitalDepartment;
import com.healthcloud.utils.PageParam;
import com.healthcloud.vo.HospitalVo;

/**
 * Created by xiam on 2015/6/16.
 */
public interface HospitalService {

    /**
     * 根据hospital查询所有医院信息(包括医院和社区的信息)
     *
     * @param hospital
     * @return
     */
    List<Hospital> findByEntityAll(Hospital hospital);

    /**
     * 添加医院信息
     *
     * @param hospital
     * @return
     */
    Hospital save(Hospital hospital);

    /**
     * 添加医院信息，医院科室
     *
     * @param hospital  医院信息
     * @param hdList    科室id及科室别名信息
     * @return
     */
    Hospital save(Hospital hospital, List<HospitalDepartment> hdList);

    /**
     * 批量添加医院信息
     * 若有id则修改，没id则新增
     *
     * @param hosList  医院列表信息
     * @return
     */
    void saveBatch(List<Hospital> hosList);

    /**
     * 修改医院信息
     *
     * @param hospital
     * @return
     */
    int update(Hospital hospital);

    /**
     * 修改医院信息，医院科室
     *
     * @param hospital  医院信息
     * @param hdList    科室id及科室别名信息
     * @return
     */
    void update(Hospital hospital, List<HospitalDepartment> hdList);

    /**
     * 删除医院信息
     *
     * @param id
     * @return
     */
    int delete(Long id);

    /**
     * 删除医院信息
     *
     * @param ids
     * @return
     */
    int deletes(Long[] ids);

    /**
     * 逻辑删除医院信息
     *
     * @param id
     * @return
     */
    int logicalDelete(Long id);

    /**
     * 逻辑删除医院信息
     *
     * @param ids
     * @return
     */
    int logicalDeletes(Long[] ids);

    /**
     * 根据id查询医院信息
     *
     * @param id
     * @return
     */
    Hospital get(Long id);

    /**
     * 医院查找
     *
     * @param criteria 查询条件
     * @param pageable 分页参数
     * @return
     */
    Page<Hospital> search(HospitalCriteria criteria, Pageable pageable);


    /**
     * 医院查找
     *
     * @param hospital 查询条件
     * @param pageParam 分页参数
     * @return
     */
    List<Hospital> search(Hospital hospital, PageParam pageParam);

    /**
     * 医院记录总条数
     *
     * @param hospital 查询条件
     * @return
     */
    int count(Hospital hospital);

    /**
     * 医院查找(包括医院和社区的信息)
     *
     * @param hospital 查询条件
     * @param pageParam 分页参数
     * @return
     */
    List<Hospital> searchAll(Hospital hospital, PageParam pageParam);

    /**
     * 医院记录总条数(包括医院和社区的信息)
     *
     * @param hospital 查询条件
     * @return
     */
    int countAll(Hospital hospital);

    /**
     * 根据地区code查询医院列表
     *
     * @param areaCode 地区code
     * @return
     */
    List<Hospital>  getHospitalListByAreaCode(String areaCode, Integer hosType);

    /**
     * 根据医院id查询下属社区医院列表
     *
     * @param id 医院id
     * @return
     */
    List<Hospital> getAffiliatedHosp(Long id);

    /**
     * 根据医院id查询医院与部门关系列表
     *
     * @param hospId 医院id
     * @return 医院与部门关系列表
     */
    List<HospitalDepartment> getHospitalDepartmentByHospId(Integer hospId);

    /**
     * 根据医生id获取医院信息
     *
     * @param drId 医生id
     * @return 医院信息列表
     */
    List<Hospital> getHospitalsByDrId(Long drId);

    /**
     * 根据用户id获取医院信息
     *
     * @param userId 用户id
     * @return 医院信息列表
     */
    List<Hospital> getHospitalsByUserId(Long userId);

    /**
     * 根据医生id获取医院信息
     *
     * @param drId 医生id
     * @return 医院完整信息列表（医院信息，科室信息）
     */
    List<HospitalVo> getHospitalVosByDrId(Long drId);

    /**
     * 处理医院展示界面信息 By Dean
     * @param dictHashMap
     * @return
     */
    List<Hospital> dellShowData(HashMap<String,HashMap> dictHashMap,List<Hospital> hospitalList);
    
    List<Hospital> searchByName(String name, String offset, String limit);
    
    Integer countByName(String name, String offset, String limit);

    List<Hospital> listByIds(List<Long> ids);
}
